package jedis;

import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;

import redis.clients.jedis.Jedis;

public class JedisTest {

	private static Jedis jedis = new Jedis("192.168.1.53", 6379);

	public static void main(String[] args) {
		testString();
		//		testList();
	}

	public static void testString() {
		jedis.set("foo", "dddd");
		long startTime1 = System.currentTimeMillis();
		System.out.println(jedis.get("foo"));
		long endTime2 = System.currentTimeMillis();
		System.err.println(endTime2 - startTime1);

		jedis.set("foo", "ccccccc");
		System.out.println(jedis.get("foo"));
	}

	public static void testList() {
		jedis.del("messages");
		jedis.rpush("messages", "1111");
		jedis.rpush("messages", "2222");
		jedis.rpush("messages", "3333");

		// 再取出所有数据jedis.lrange是按范围取出，
		// 第一个是key，第二个是起始位置，第三个是结束位置，jedis.llen获取长度 -1表示取得所有
		List<String> values = jedis.lrange("messages", 0, -1);
		System.out.println(values);

		// 清空数据
		System.out.println(jedis.flushDB());
		// 添加数据
		jedis.lpush("lists", "vector");
		jedis.lpush("lists", "ArrayList");
		jedis.lpush("lists", "LinkedList");
		// 数组长度
		System.out.println(jedis.llen("lists"));
		// 排序
		System.out.println(jedis.sort("lists"));
		// 字串
		System.out.println(jedis.lrange("lists", 0, 3));
		// 修改列表中单个值
		jedis.lset("lists", 0, "hello list!");
		// 获取列表指定下标的值
		System.out.println(jedis.lindex("lists", 1));
		// 删除列表指定下标的值
		System.out.println(jedis.lrem("lists", 1, "vector"));
		// 删除区间以外的数据
		System.out.println(jedis.ltrim("lists", 0, 1));
		// 列表出栈
		System.out.println(jedis.lpop("lists"));
		// 整个列表值
		System.out.println(jedis.lrange("lists", 0, -1));
	}

	public static void testSet() {
		System.out.println("==Set==");
		jedis.sadd("myset", "1");
		jedis.sadd("myset", "2");
		jedis.sadd("myset", "3");
		jedis.sadd("myset", "4");
		Set<String> setValues = jedis.smembers("myset");
		System.out.println(setValues);

		// 移除noname
		jedis.srem("myset", "4");
		System.out.println(jedis.smembers("myset"));// 获取所有加入的value
		System.out.println(jedis.sismember("myset", "4"));// 判断 minxr
															// 是否是sname集合的元素
		System.out.println(jedis.scard("sname"));// 返回集合的元素个数

		// 清空数据
		System.out.println(jedis.flushDB());
		// 添加数据
		jedis.sadd("sets", "HashSet");
		jedis.sadd("sets", "SortedSet");
		jedis.sadd("sets", "TreeSet");
		// 判断value是否在列表中
		System.out.println(jedis.sismember("sets", "TreeSet"));
		;
		// 整个列表值
		System.out.println(jedis.smembers("sets"));
		// 删除指定元素
		System.out.println(jedis.srem("sets", "SortedSet"));
		// 出栈
		System.out.println(jedis.spop("sets"));
		System.out.println(jedis.smembers("sets"));
		//
		jedis.sadd("sets1", "HashSet1");
		jedis.sadd("sets1", "SortedSet1");
		jedis.sadd("sets1", "TreeSet");
		jedis.sadd("sets2", "HashSet2");
		jedis.sadd("sets2", "SortedSet1");
		jedis.sadd("sets2", "TreeSet1");
		// 交集
		System.out.println(jedis.sinter("sets1", "sets2"));
		// 并集
		System.out.println(jedis.sunion("sets1", "sets2"));
		// 差集
		System.out.println(jedis.sdiff("sets1", "sets2"));
	}

	public static void sortedSet() {
		System.out.println("==SoretedSet==");
		jedis.zadd("hackers", 1940, "Alan Kay");
		jedis.zadd("hackers", 1953, "Richard Stallman");
		jedis.zadd("hackers", 1965, "Yukihiro Matsumoto");
		jedis.zadd("hackers", 1916, "Claude Shannon");
		jedis.zadd("hackers", 1969, "Linus Torvalds");
		jedis.zadd("hackers", 1912, "Alan Turing");
		Set<String> setValues = jedis.zrange("hackers", 0, -1);
		System.out.println(setValues);
		Set<String> setValues2 = jedis.zrevrange("hackers", 0, -1);
		System.out.println(setValues2);

		// 清空数据
		System.out.println(jedis.flushDB());
		// 添加数据
		jedis.zadd("zset", 10.1, "hello");
		jedis.zadd("zset", 10.0, ":");
		jedis.zadd("zset", 9.0, "zset");
		jedis.zadd("zset", 11.0, "zset!");
		// 元素个数
		System.out.println(jedis.zcard("zset"));
		// 元素下标
		System.out.println(jedis.zscore("zset", "zset"));
		// 集合子集
		System.out.println(jedis.zrange("zset", 0, -1));
		// 删除元素
		System.out.println(jedis.zrem("zset", "zset!"));
		System.out.println(jedis.zcount("zset", 9.5, 10.5));
		// 整个集合值
		System.out.println(jedis.zrange("zset", 0, -1));
	}

	public static void testHsh() {
		System.out.println("==Hash==");
		Map<String, String> pairs = new HashMap<String, String>();
		pairs.put("name", "Akshi");
		pairs.put("age", "2");
		pairs.put("sex", "Female");
		jedis.hmset("kid", pairs);
		List<String> name = jedis.hmget("kid", "name");// 结果是个泛型的LIST
		// jedis.hdel("kid","age"); //删除map中的某个键值
		System.out.println(jedis.hmget("kid", "pwd")); // 因为删除了，所以返回的是null
		System.out.println(jedis.hlen("kid")); // 返回key为user的键中存放的值的个数
		System.out.println(jedis.exists("kid"));// 是否存在key为user的记录
		System.out.println(jedis.hkeys("kid"));// 返回map对象中的所有key
		System.out.println(jedis.hvals("kid"));// 返回map对象中的所有value

		Iterator<String> iter = jedis.hkeys("kid").iterator();
		while (iter.hasNext()) {
			String key = iter.next();
			System.out.println(key + ":" + jedis.hmget("kid", key));
		}

		List<String> values = jedis.lrange("messages", 0, -1);
		values = jedis.hmget("kid", new String[] { "name", "age", "sex" });
		System.out.println(values);
		Set<String> setValues = jedis.zrange("hackers", 0, -1);
		setValues = jedis.hkeys("kid");
		System.out.println(setValues);
		values = jedis.hvals("kid");
		System.out.println(values);
		pairs = jedis.hgetAll("kid");
		System.out.println(pairs);

		// 清空数据
		System.out.println(jedis.flushDB());
		// 添加数据
		jedis.hset("hashs", "entryKey", "entryValue");
		jedis.hset("hashs", "entryKey1", "entryValue1");
		jedis.hset("hashs", "entryKey2", "entryValue2");
		// 判断某个值是否存在
		System.out.println(jedis.hexists("hashs", "entryKey"));
		// 获取指定的值
		System.out.println(jedis.hget("hashs", "entryKey")); // 批量获取指定的值
		System.out.println(jedis.hmget("hashs", "entryKey", "entryKey1"));
		// 删除指定的值
		System.out.println(jedis.hdel("hashs", "entryKey"));
		// 为key中的域 field 的值加上增量 increment
		System.out.println(jedis.hincrBy("hashs", "entryKey", 123l));
		// 获取所有的keys
		System.out.println(jedis.hkeys("hashs"));
		// 获取所有的values
		System.out.println(jedis.hvals("hashs"));
	}

}
